export class {{classname}} {{#parent}}extends {{{parent}}} {{/parent}}{
{{#additionalPropertiesType}}

    [key: string]: {{{additionalPropertiesType}}}{{#hasVars}} | any{{/hasVars}};

{{/additionalPropertiesType}}
{{#vars}}
    {{#description}}
    /**
     * {{&description}}
     */
    {{/description}}
    {{#isReadOnly}}readonly {{/isReadOnly}}{{name}}{{^required}}?{{/required}}: {{#isEnum}}{{{datatypeWithEnum}}} | string{{/isEnum}}{{^isEnum}}{{{datatype}}}{{/isEnum}}{{#isListContainer}}[]{{/isListContainer}};
{{/vars}}

    constructor(input?: any) {
        {{#parent}}
        super();
        {{/parent}}
        if (input) {
            Object.assign(this, input);
            {{#vars}}
            {{^isPrimitiveType}}
            {{^isListContainer}}
            {{^isMapContainer}}
            {{^isDateTime}}
            {{^isDate}}
            this.{{name}} = input.{{name}} ? new {{#isEnum}}{{{datatypeWithEnum}}}{{/isEnum}}{{^isEnum}}{{{datatype}}}{{/isEnum}}(input.{{name}}) : undefined;
            {{/isDate}}
            {{/isDateTime}}
            {{/isMapContainer}}
            {{/isListContainer}}
            {{#isListContainer}}
            if (input.{{name}}) {
                this.{{name}} = input.{{name}}.map((item: any) => {
                    return new {{#isEnum}}{{{datatypeWithEnum}}}{{/isEnum}}{{^isEnum}}{{{datatype}}}{{/isEnum}}(item);
                });
            }
            {{/isListContainer}}
            {{/isPrimitiveType}}
            {{#isDate}}
            this.{{name}} = input.{{name}} ? DateAlfresco.parseDate(input.{{name}}) : undefined;
            {{/isDate}}
            {{#isDateTime}}
            this.{{name}} = input.{{name}} ? DateAlfresco.parseDate(input.{{name}}) : undefined;
            {{/isDateTime}}
            {{/vars}}
        }
    }

}{{>modelGenericEnums}}